home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2003 November A / PCWK1103A.iso / Adobe After Effects 6.0 tryout / MM5.Cab / F3699_smartImport.jsx.304FA6F7_2783_11D4_8520_00C04F602FD3 < prev    next >
Text File  |  2003-07-18  |  3KB  |  115 lines

  1. //Ask the user for a folder whose contents are to be imported
  2.  
  3.  
  4.  
  5. var targetFolder = folderGetDialog("Import Items from Folder..."); //returns a folder or null
  6. if (targetFolder) {
  7.  
  8.     // if no project open, create a new project to toss the files into. [23839]
  9.     if (!app.project) {
  10.         app.newProject();
  11.     }
  12.  
  13.     function processFile (theFile) {
  14.         try {
  15.             var importOptions = new ImportOptions (theFile); //create a variable containing ImportOptions
  16.             importSafeWithError (importOptions);
  17.         } catch( error ) {
  18.             // eat errors.
  19.         }
  20.     }
  21.     
  22.     function testForSequence (files){
  23.         var searcher = new RegExp ("[0-9]+");
  24.         var movieFileSearcher = new RegExp ("(mov|avi|mpg)$", "i");
  25.         var parseResults = new Array;
  26.         
  27.         for (x = 0; (x < files.length) & x < 10; x++) { //test that we have a sequence, stop parsing after 10 files
  28.             
  29.             var movieFileResult = movieFileSearcher.exec(files[x].name);
  30.             if (! movieFileResult) {
  31.             
  32.                 var currentResult = searcher.exec(files[x].name);
  33.                 //regular expressions return null if no match was found
  34.                 //otherwise they return an array with the following information:
  35.                 //array[0] = the matched string
  36.                 //array[1..n] = the matched capturing parentheses
  37.             
  38.                 if (currentResult) { //we have a match - the string contains numbers
  39.                     //the match of those numbers is stored in the array[1]
  40.                     //take that number and save it into parseResults
  41.                     parseResults[parseResults.length] = currentResult[0];
  42.                 }
  43.                 else {
  44.                     parseResults[parseResults.length] = null;
  45.                 }
  46.             }
  47.             else {
  48.                 parseResults[parseResults.length] = null;
  49.             }
  50.         }
  51.         
  52.         //if all the files we just went through have a number in their file names, 
  53.         //assume they are part of a sequence & return the first file
  54.         
  55.         var result = null;
  56.         for (i = 0; i < parseResults.length; ++i) {
  57.             if (parseResults[i]) {
  58.                 if (! result) {
  59.                     result = files[i];        
  60.                 }    
  61.             } else {
  62.                 //case in which a file name did not contain a number
  63.                 result = null;
  64.                 break;
  65.             }
  66.         }
  67.         return result;
  68.     }
  69.  
  70.     function importSafeWithError (importOptions) {
  71.         try { 
  72.             app.project.importFile (importOptions);
  73.         } catch (error) {
  74.             alert(error.toString() + importOptions.file.fsName);
  75.         }
  76.     }
  77.  
  78.     function processFolder(theFolder) {
  79.         var files = theFolder.getFiles(); //Get an array of files in the target folder
  80.             
  81.         //test whether theFolder contains a sequence
  82.         var sequenceStartFile = testForSequence(files);
  83.         
  84.         //if it does contain a sequence, import the sequence
  85.         if (sequenceStartFile) {
  86.             try {
  87.                 var importOptions = new ImportOptions (sequenceStartFile); //create a variable containing ImportOptions
  88.                 
  89.                 importOptions.sequence = true;
  90.                 //importOptions.forceAlphabetical = true; //un-comment this if you want to force alpha order by default
  91.                 importSafeWithError (importOptions);
  92.             } catch (error) {
  93.             
  94.             }
  95.         }
  96.         
  97.         //otherwise, import the files and recurse
  98.         
  99.         for (index in files) { //Go through the array and set each element to singleFile, then run the following
  100.             if (files[index] instanceof File) {
  101.                 if (! sequenceStartFile) { //if file is already part of a sequence, don't import it individually
  102.                     processFile (files[index]); //calls the processFile function above
  103.                 }
  104.             }
  105.             if (files[index] instanceof Folder) {
  106.                 processFolder (files[index]); // recursion
  107.             }
  108.         }
  109.     }
  110.     
  111.     processFolder(targetFolder);
  112. }
  113.  
  114. //Recursively examine that folder
  115.